1. Field of the Invention
This invention relates to parallel and more particularly relates to coordinating storage requests to a data storage device from multiple processors or threads.
2. Description of the Related Art
Traditional data storage devices, such as disk drives, optical drives, etc. often operate as a random access device to store data. Random access is typically the ability to access an arbitrary element of a sequence in equal time. This differs from sequential access where data is stored sequentially and also accessed sequentially such that access time varies significantly based on location of data. For example, a tape for storing data is a sequential device. Accessing one data element can take a different amount of time since one data element may be located close to the where a read head is located and another data element may take longer to access because the tape must be forwarded or reversed to get to the second data element.
A random access device, such as a memory chip, a disk drive, or solid-state storage, operates as a random access device because access time to every data element on the random access device requires approximately the same access time. Random access is desirable because of the predictable nature and efficiency of data access. Some devices, such as memory chips, support both random read and random write, typically supporting the ability to overwrite data with updated data. Some devices, such as flash memory, support random read, but require an entire region of memory to be erased (e.g., an erase block or erase region) before data can be written into the region.
Typically, a file system communicates with a random access storage device using low level commands. The file system manages where the data is placed. The low level commands usually include a physical address and a data length in a command to store or access data. Data in a random access storage device may be updated in a read-modify-write operation where data at a particular address is read, modified, and then written to the same location where it was stored.
Data storage devices are often accessed by multiple devices. Usually a file server manages access to the data storage device and coordinates requests that involve common data. For a typical random access data storage device, once a storage request is submitted by a file server, the file server typically must wait until the request is complete before sending another storage request to ensure that data is written in the proper order. Where a data storage device takes a relatively long time to complete a particular storage request, processing times can be relatively lengthy.
Some data storage devices store data sequentially while data access times for the data storage devices are approximately equal. For example, data is stored sequentially in some solid-state storage devices, such as flash memory. Data access times for solid-state storage devices are fairly uniform, like other random access devices. Using a traditional file server or other data management system to coordinate requests from different devices for a sequential storage device impacts performance. For example, during a read-modify-write operation, modified data is not written back to the same location, but is instead sequentially stored. Where a file server manages the update, the file server must wait for the entire update process to complete before servicing another data request to the same file or object. When metadata such as that stored in directories and maps is locked while one append process completes an update, other processes or threads may be locked out from accessing the metadata. This update includes waiting for the sequential storage device to return a physical location where the data was stored sequentially.
In a parallel computing environment, waiting for a data storage device to complete a storage request is inefficient because parallel processors may be held up waiting for a single thread storage process to complete. For a sequential storage system implementing a low-level, log-based storage process, what is needed is an optimistic completion approach that allows many threads or processes to execute in parallel.